package com.tydic.system.domain.req;


import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * 创建并推送签署请求参数
 *
 * @author zr
 * @date 2023-09-14 16:18
 */
@Data
@NoArgsConstructor

public class CreateAndPushRequest {
    /**
     * 文档主题
     */
    /**
     * 文档主题
     */
    private String docTitle;
    /**
     * 文档在第三方业务系统的唯一标识
     */
    /**
     * 文档在第三方业务系统的唯一标识
     */
    private String tpDocId;
    /**
     * 签署文件列表
     */
    /**
     * 签署文件列表
     */
    private List<Doc> docList;
    /**
     * 文档分类名称。文档分类名称和分类编码只能二选一，不允许同时传入。不传则默认为通用分类
     */
    /**
     * 文档分类名称。文档分类名称和分类编码只能二选一，不允许同时传入。不传则默认为通用分类
     */
    private String categoryName;
    /**
     * 文档分类编码。文档分类名称和分类编码只能二选一，不允许同时传入。都不传则默认为通用分类
     */
    /**
     * 文档分类编码
     */
    private String categoryCode;
    /**
     * 签署文件类型 1.PDF（默认），2.OFD
     */
    /**
     * 签署文件类型
     */
    private Integer signFileType;
    /**
     * 签署文档类型 1：合同类（默认）
     * 2：单据类（当“signDocType”的值为2：
     * 单据类时，只允许添加一份签署文件、一个签署方）
     */
    /**
     * 签署文档类型
     */
    private Integer signDocType;
    /**
     * 设置是否关闭签署任务
     */
    /**
     * 设置是否关闭签署任务
     */
    private Integer isAutoArchive;
    /**
     * 使用页面级指定签署位置
     */
    /**
     * 使用页面级指定签署位置
     */
    private Integer isPagePosition;
    /**
     * 水印信息
     */
    /**
     * 水印信息
     */
    private List<WaterMark> waterMarkList;
    /**
     * 发起人在当前系统的唯一标识
     */
    /**
     * 发起人在当前系统的唯一标识
     */
    private String senderAccountId;
    /**
     * 发起人在第三方业务系统的唯一标识
     */
    /**
     * 发起人在第三方业务系统的唯一标识
     */
    private String tpSenderAccountId;
    /**
     * 发起人手机号
     */
    /**
     * 发起人手机号
     */
    private String senderMobile;
    /**
     * 发起人手机号区号
     */
    /**
     * 发起人手机号区号，非必传，默认+86，传参时需带“+”号
     */
    private String senderAreaCode;
    /**
     * 发起人邮箱
     */
    /**
     * 发起人邮箱
     */
    private String senderEmail;
    /**
     * 文档所属企业在当前系统的唯一标识
     */
    /**
     * 文档所属企业在当前系统的唯一标识
     */
    private String companyId;
    /**
     * 文档主题
     */
    /**
     * 发起方企业名称
     */
    private String companyName;
    /**
     * 文档所属企业在第三方业务系统的唯一标识
     */
    /**
     * 文档所属企业在第三方业务系统的唯一标识
     */
    private String tpOrgId;
    /**
     * 是否顺序签，0：否；1：是（默认）
     */
    /**
     * 是否顺序签，0：否；1：是（默认）
     */
    private Integer isSort;
    /**
     * 文档到期日；格式：yyyy-MM-dd
     */
    /**
     * 文档到期日；格式：yyyy-MM-dd
     */
    private String expireDate;
    /**
     * 文档签署截止日；格式：yyyy-MM-dd
     */
    /**
     * 文档签署截止日；格式：yyyy-MM-dd
     */
    private String signDeadline;
    /**
     * 回调地址
     */
    /**
     * 回调地址
     */
    private String notifyUrl;
    /**
     * 回调文档地址访问码
     */
    /**
     * 回调文档地址访问码
     */
    private String notifyUrlAccessCode;
    /**
     * 关联文档
     */
    /**
     * 关联文档
     */
    private RelationDocs relationDocs;
    /**
     * 备注
     */
    /**
     * 备注
     */
    private String remark;
    /**
     * 签署方列表
     */
    /**
     * 签署方列表 必填
     */
    private List<SignerInfo> signerInfos;


    /**
     * 签署文件列表
     */
    @Data
    @NoArgsConstructor
    public static class Doc {
        /**
         * 通过上传文件接口返回的文件id，
         * 将转换为pdf签署文件
         * 必填
         */
        /**
         * 通过上传文件接口返回的文件id，将转换为pdf签署文件 必填
         */
        private String fileId;
        /**
         * 二维码信息
         */
        /**
         * 二维码信息
         */
        private QrCodeInfo qrCodeInfo;

        @Data
        @NoArgsConstructor
        public static class QrCodeInfo {
            /**
             * 二维码水平位置信息
             */
            /**
             * 二维码水平位置信息
             */
            private Integer horizontalPositionType;
            /**
             * 二维码垂直位置信息
             */
            /**
             * 二维码垂直位置信息
             */
            private Integer verticalPositionType;
        }
    }


    @Data
    @NoArgsConstructor
    public static class WaterMark {
        /**
         * 文档主题
         */
        /**
         * 文档主题
         */
        private Integer type;
        /**
         * 文档主题
         */
        /**
         * 文档主题
         */
        private String text;
        /**
         * 文档主题
         */
        /**
         * 文档主题
         */
        private String imageId;
        /**
         * 文档主题
         */
        /**
         * 文档主题
         */
        private Double fontSize;
        /**
         * 文档主题
         */
        /**
         * 文档主题
         */
        private String fontColor;
        /**
         * 文档主题
         */
        /**
         * 文档主题
         */
        private Double rotate;
        /**
         * 文档主题
         */
        /**
         * 文档主题
         */
        private Double opacity;
        /**
         * 文档主题
         */
        /**
         * 文档主题
         */
        private Integer positionType;

    }

    @Data
    @NoArgsConstructor
    public static class RelationDocs {
        /**
         * 上传文件接口返回的文件id
         */
        /**
         * 上传文件接口返回的文件id
         */
        private List<String> fileIdList;
        /**
         * 平台内已有的文档id
         */
        /**
         * 平台内已有的文档id
         */
        private List<String> docIdList;

    }

    @Data
    @NoArgsConstructor
    public static class SignerInfo {
        /**
         * 签署人在当前系统的唯一识别标识
         */
        /**
         * 签署人在当前系统的唯一识别标识
         */
        private String signerAccountId;
        /**
         * 签署人在第三方业务系统的唯一标识
         */
        /**
         * 签署人在第三方业务系统的唯一标识
         */
        private String tpSignerAccountId;
        /**
         * 页面跳转地址
         */
        /**
         * 页面跳转地址
         */
        private String returnUrl;
        /**
         * 签署人姓名
         */
        /**
         * 签署人姓名
         */
        private String signerName;
        /**
         * 签署人手机号
         */
        /**
         * 签署人手机号
         */
        private String mobile;
        /**
         * 文档签署页面访问方式
         */
        /**
         * 文档签署页面访问方式
         */
        private Integer accessType;
        /**
         * 手机号区号
         */
        /**
         * 手机号区号
         */
        private String areaCode;
        /**
         * 文档签署页面访问码
         */
        /**
         * 文档签署页面访问码
         */
        private String accessCode;
        /**
         * 签署人邮箱
         */
        /**
         * 签署人邮箱
         */
        private String email;
        /**
         * 页面终端适配方式
         */
        /**
         * 页面终端适配方式
         */
        private Integer clientPageType;
        /**
         * 代表企业签时，企业在当前系统的唯一识别标识
         */
        /**
         * 代表企业签时，企业在当前系统的唯一识别标识
         */
        private String companyId;
        /**
         * 代表企业签时，填写未注册的企业名称
         */
        /**
         * 代表企业签时，填写未注册的企业名称
         */
        private String companyName;
        /**
         * 代表企业签时，企业在第三方业务系统的唯一标识
         */
        /**
         * 代表企业签时，企业在第三方业务系统的唯一标识
         */
        private String tpOrgId;
        /**
         * 签署优先级
         */
        /**
         * 签署优先级
         */
        private Integer priority;
        /**
         * 代表企业签署时，签署要求
         */
        /**
         * 代表企业签署时，签署要求
         */
        private Integer signDemand;
        /**
         * 是否发送签署通知
         */
        /**
         * 是否发送签署通知
         */
        private Integer isSendNotify;
        /**
         * 签署类型
         */
        /**
         * 签署类型，0：门户手动签署（默认）；1：系统免验证签；2：手动免验证签。仅signMode为0时，支持免验证签。
         */
        private Integer signType;
        /**
         * 签署方式
         */
        /**
         * 签署方式，0：推送签署任务，1：获取合同签署连接
         */
        private Integer signMode;
        /**
         * signType为1和2时发送签署通知，
         * 1:签署前后不通知(默认);
         * 2:签署完成通知;
         * 3:签署前通知;
         * 4:签署前后都通知
         */
        private Integer autoSignNotifyType;
        /**
         * 是否指定签署位置,0：否（默认）；1：是
         */
        /**
         * 是否指定签署位置,0：否（默认）；1：是
         */
        private Integer isPosition;
        /**
         * 意愿校验方式
         */
        /**
         * 意愿校验方式
         */
        private String verifyMode;
        /**
         * 签署回调流水号，用于识别具体哪一次签署
         */
        /**
         * 签署回调流水号，用于识别具体哪一次签署
         */
        private String notifyNo;
        /**
         * 文件签署信息列表
         */
        /**
         * 文件签署信息列表
         */
        private List<DocSignInfoDTO> docSignInfoDTO;
        /**
         * 签署个人签名时
         */
        /**
         * 签署个人签名时
         */
        private Integer personSealType;
        /**
         * URL有效期，以分钟为单位进行设置
         */
        /**
         * URL有效期，以分钟为单位进行设置，大于等于0的正整数，不传则默认10080分钟（7天），最长有效期为一年，传0则默认按最长有效期
         */
        private Integer urlTimeOut;
        /**
         * 语言 en-US：English，zh-CN：简体中文（默认）
         */
        /**
         * 语言 en-US：English，zh-CN：简体中文（默认）
         */
        private String lang;


    }
}
